home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / Feelin021015 / Includes / Libraries / feelin.h next >
Encoding:
C/C++ Source or Header  |  2002-10-28  |  51.1 KB  |  1,329 lines

  1. #ifndef FEELIN_H
  2. #define FEELIN_H    1
  3.  
  4. /*
  5. **    $VER: feelin.h 3.0 (26-06-2002)
  6. **
  7. **    feelin.library definitions
  8. **
  9. **    © 2001-02 Laviale Olivier (Lotan9@aol.com)
  10. */
  11.  
  12. /// Module information
  13. #include    <exec/libraries.h>
  14. #include    <exec/semaphores.h>
  15.  
  16. #include    <graphics/rastport.h>
  17. #include    <graphics/text.h>
  18. #include    <intuition/intuition.h>
  19. #include    <utility/tagitem.h>
  20.  
  21. #define     TRUE -1
  22. #define     FV_VERSION 4L
  23.  
  24. #define     FEELIN_DEV
  25.  
  26. /*
  27.    All constants follow these rules :
  28.  
  29.    FM_<method>          - General method, understood by all classes
  30.    FM_<class>_<method>  - Class method
  31.    FA_<attrib>          - General attribute, known by many classes.
  32.    FA_<class>_<attrib>  - Specific class attribute
  33.    FV_<class>_<value>   - Special attribute value
  34.    FS_<name>            - Shortcut to structure name
  35.    FP_<class>_<value>   - Preference value, resolved on FM_Setup
  36.  
  37.    FA_<attrib> definitions are followed by a comment [ISG] :
  38.       I : it's possible to specify this attribute at object creation time.
  39.       S : it's possible to change this attribute with F_Set().
  40.       G : it's possible to get this attribute with F_Get().
  41.  
  42.    FR_<class> = Registered class id (unsigned 24 bits)
  43.    FR_<class>_Mthd = First Method ID of <class>
  44.    FR_<class>_Attr = First Attribute ID of <class>
  45.    FR_<class>_Pref = First Preference ID of <class>
  46.  
  47.    Ranges:
  48.  
  49.    $F0000000 - $FFFFFFFF is reserved for Feelin methods.
  50.    $8F000000 - $8FFFFFFF is reserved for Feelin attributes.
  51.    $50000000 - $5FFFFFFF is reserver for Preference items.
  52.  
  53.    $C0000000 - $CFFFFFFF is reserved for custom classes methods.
  54.    $8C000000 - $8CFFFFFF is reserved for custom classes attributes.
  55. */
  56.  
  57. #define MTHD_BASE 0xF0000000
  58. #define ATTR_BASE 0x8F000000
  59. #define PREF_BASE 0x50000000
  60.  
  61. #define FCCM_BASE 0xC0000000
  62. #define FCCA_BASE 0x8C000000
  63. //+
  64.  
  65. /*** Misc ******************************************************************/
  66.  
  67. /// System Structures
  68. //#define FS_Class                    FeelinClass
  69.  
  70. struct FeelinNode {
  71.     struct FeelinNode              *Next;
  72.     struct FeelinNode              *Prev;
  73. };
  74.  
  75. struct FeelinList {
  76.     struct FeelinNode              *Head;
  77.     struct FeelinNode              *Tail;
  78. };
  79.  
  80. struct FeelinListSemaphored {
  81.     struct FeelinNode              *Head;
  82.     struct FeelinNode              *Tail;
  83. /* end of FeelinList header */
  84.     struct SignalSemaphore          Semaphore;
  85. };
  86.  
  87. struct FeelinNodeData {
  88.     struct FeelinNode              *Next;
  89.     struct FeelinNode              *Prev;
  90. /* end of FeelinNode header */
  91.     APTR                            Data;
  92. };
  93.  
  94. struct FeelinClass {
  95.     struct FeelinNode              *Next;
  96.     struct FeelinNode              *Prev;
  97. /* end of FeelinNode header */
  98.     STRPTR                          ID;
  99.     UWORD                           OffSet;
  100.     UWORD                           Size;
  101.     struct FeelinClass             *Super;
  102.  
  103.     APTR                            UserData;
  104.     APTR                          (*Dispatcher)();
  105. #ifdef FEELIN_DEV
  106.     APTR                          (*Setup)();
  107.     APTR                          (*Cleanup)();
  108.     ULONG                           OpenCount;
  109.     struct Library                 *Libbase;
  110.     struct FeelinPool              *ObjectsPool;
  111. #endif
  112. };
  113.  
  114. struct FeelinBase
  115. {
  116.     struct  Library                 Libnode;
  117.     UBYTE                           fb_Flags;
  118.     UBYTE                           fb_Reserved;
  119.     APTR                            fb_SegList;
  120.  
  121.     struct  FeelinServer           *SystemServer;
  122.  
  123.     struct  Library                *Exec;
  124.     struct  Library                *Dos;
  125.     struct  Library                *Graphics;
  126.     struct  Library                *Intuition;
  127.     struct  Library                *Utility;
  128.     struct  Library                *Layers;
  129.  
  130.     struct  FeelinPool             *DefaultPool;
  131.     struct  FeelinPool             *ClassesPool;
  132.  
  133.     struct  FeelinList              Pools;
  134.     struct  FeelinList              Classes;
  135.     struct  FeelinListSemaphored    Servers;
  136.  
  137.     struct  SignalSemaphore         RenderSemaphore;
  138.     APTR                            Console;
  139.     APTR                            PutChar;
  140. };
  141.  
  142. #ifdef FEELIN_DEV
  143. struct FeelinMemChunk
  144. {
  145.     struct  FeelinMemChunk         *Next;
  146.     ULONG                           Size; /* Complete size (Struct + Alloc) */
  147. /* Memory area follows */
  148. };
  149.  
  150. struct FeelinPuddle
  151. {
  152.     struct  FeelinNode             *Next;
  153.     struct  FeelinNode             *Prev;
  154. /* end of FeelinNode header */
  155.     struct  FeelinPool             *Pool;
  156.     ULONG                           Lower;
  157.     ULONG                           Upper;
  158.     struct  FeelinMemChunk         *First;
  159.     ULONG                           Size;   /* Real size of allocation */
  160.     ULONG                           Free;   /* Memory area follows */
  161. };
  162.  
  163. struct FeelinPool
  164. {
  165.     struct  FeelinNode             *Next;
  166.     struct  FeelinNode             *Prev;
  167. /* end of FeelinNode header */
  168.     struct  SignalSemaphore         Semaphore;
  169.  
  170.     ULONG                           Flags;
  171.     ULONG                           PuddleSize;
  172.     ULONG                           ThreshSize;
  173.     struct  FeelinList              Puddles;
  174. };
  175. #endif
  176. //+
  177. /// Macros:
  178. /// Macros / Quick object's structure handling
  179. #define INST_DATA(cl,o) ((void *) ( ((UBYTE *)o) + cl->OffSet))
  180.  
  181. #define _asarea(o)      ((struct FeelinArea *)(o))
  182. #define _box(o)         (_asarea(o)->Box)
  183. #define _x(o)           _box(o).x
  184. #define _y(o)           _box(o).y
  185. #define _w(o)           _box(o).w
  186. #define _h(o)           _box(o).h
  187. #define _x2(o)          (_x(o) + _w(o) - 1)
  188. #define _y2(o)          (_y(o) + _h(o) - 1)
  189. #define _inner(o)       (_asarea(o)->Inner)
  190. #define _bl(o)          _inner(o).l
  191. #define _bt(o)          _inner(o).t
  192. #define _br(o)          _inner(o).r
  193. #define _bb(o)          _inner(o).b
  194. #define _mx(o)          (_x(o) + _bl(o))
  195. #define _my(o)          (_y(o) + _bt(o))
  196. #define _mw(o)          (_w(o) - _bl(o) - _br(o))
  197. #define _mh(o)          (_h(o) - _bt(o) - _bb(o))
  198. #define _mx2(o)         (_x2(o) - _br(o))
  199. #define _my2(o)         (_y2(o) - _bb(o))
  200. #define _minw(o)        (_asarea(o)->MinMax.MinW)
  201. #define _minh(o)        (_asarea(o)->MinMax.MinH)
  202. #define _maxw(o)        (_asarea(o)->MinMax.MaxW)
  203. #define _maxh(o)        (_asarea(o)->MinMax.MaxH)
  204. #define _weight(o)      (_asarea(o)->Weight)
  205. #define _flags(o)       (_asarea(o)->Flags)
  206. #define _font(o)        (_asarea(o)->Font)
  207. #define _handler(o)     (_asarea(o)->Handler)
  208. #define _pens(o)        (_asarea(o)->Pens)
  209. #define _pen(o,p)       (_asarea(o)->Pens[p])
  210.  
  211. #define _render(o)      (_asarea(o)->Render)
  212. #define _context(o)     (_render(o)->psContext)
  213. #define _winobj(o)      (_render(o)->paWindowObject)
  214. #define _client(o)      (_render(o)->paClientObject)
  215. #define _win(o)         (_render(o)->psWindow)
  216. #define _rp(o)          (_render(o)->psRPort)
  217. #define _scr(o)         (_context(o)->psScreen)
  218. #define _fixw(o)        (_minw(o) == _maxw(o))
  219. #define _fixh(o)        (_minh(o) == _maxh(o))
  220. //+
  221. /// Macros / Drawing
  222. #define _FPen(o,fp)        (SetAPen(rp,_pen(o,fp)))
  223. #define _APen(p)           (SetAPen(rp,p))
  224. #define _BPen(p)           (SetBPen(rp,p))
  225. #define _DrMd(m)           (SetDrMd(rp,m))
  226. #define _Plot(x1,y1)       (WritePixel(rp,x1,y1))
  227. #define _Move(x,y)         (Move(rp,x,y))
  228. #define _Draw(x,y)         (Draw(rp,x,y))
  229. #define _Boxf(x1,y1,x2,y2) (RectFill(rp,x1,y1,x2,y2))
  230. #define _Text(s,c)         (Text(rp,s,c))
  231. //+
  232. /// Macros / Object Generation
  233. enum {
  234.     FV_MakeObj_Label = 1,                       // label:PTR TO CHAR, flags:LONG
  235.     FV_MakeObj_Button,                          // label:PTR TO CHAR
  236.     FV_MakeObj_Bar,                             // Horiz:BOOL
  237.     FV_MakeObj_BarTitle,                        // label:PTR TO CHAR
  238.     FV_MakeObj_Gauge,                           // Horiz:BOOl,LONG Min, LONG Max, LONG Value
  239.     FV_MakeObj_Slider,                          // Horiz:BOOl,LONG Min, LONG Max, LONG Value
  240.     FV_MakeObj_Prop,                            // Horiz:BOOl,LONG entries, LONG visible, LONG first
  241.     FV_MakeObj_String                           // label:PTR TO CHAR,maxlen:LONG
  242. };
  243.  
  244. #define SimpleButton(x)       F_MakeObj(FV_MakeObj_Button,x)
  245. #define Bar                   F_MakeObjA(FV_MakeObj_Bar,NULL)
  246. #define BarTitle(x)           F_MakeObj(FV_MakeObj_BarTitle,x)
  247. #define Gauge(h,mi,ma,v)      F_MakeObj(FV_MakeObj_Gauge,h,mi,ma,v)
  248. #define Slider(h,mi,ma,v)     F_MakeObj(FV_MakeObj_Slider,h,mi,ma,v)
  249. #define Prop(h,e,v,f)         F_MakeObj(FV_MakeObj_Prop,h,e,v,f)
  250. #define String(s,l)           F_MakeObj(FV_MakeObj_String,s,l)
  251.  
  252. #define Child       FA_Child
  253. #define End         TAG_DONE)
  254. //+
  255. ///Macros / C
  256. #ifdef _DCC
  257. #define REG(x) __ ## x
  258. #define ASM
  259. #define SAVEDS __geta4
  260. #else
  261. #define REG(x) register __ ## x
  262. #define ASM    __asm
  263. #define SAVEDS __saveds
  264. #endif
  265.  
  266. #define REG_D0  REG(d0)
  267. #define REG_D1  REG(d1)
  268. #define REG_D2  REG(d2)
  269. #define REG_D3  REG(d3)
  270. #define REG_D4  REG(d4)
  271. #define REG_D5  REG(d5)
  272. #define REG_D6  REG(d6)
  273. #define REG_D7  REG(d7)
  274.  
  275. #define REG_A0  REG(a0)
  276. #define REG_A1  REG(a1)
  277. #define REG_A2  REG(a2)
  278. #define REG_A3  REG(a3)
  279. #define REG_A4  REG(a4)
  280. #define REG_A5  REG(a5)
  281. #define REG_A6  REG(a6)
  282. #define REG_A7  REG(a7)
  283.  
  284. #define MAKE_ID(a,b,c,d)    \
  285.     ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  286. //+
  287. //+
  288. /// Keyboards events coming along FM_HandleEvent
  289. #define FV_Key_Release         -2     // upstroke return - Not a real key, faked when FK_PRESS is released
  290. #define FV_Key_None            -1
  291. #define FV_Key_Press            0
  292. #define FV_Key_Toggle           1
  293. #define FV_Key_Top              2     // control up
  294. #define FV_Key_Bottom           3     // control down
  295. #define FV_Key_Up               4     // up
  296. #define FV_Key_Down             5     // down
  297. #define FV_Key_Left             6     // left
  298. #define FV_Key_Right            7     // right
  299. #define FV_Key_Word_Prev        8     // shift left
  300. #define FV_Key_Word_Next        9     // shift right
  301. #define FV_Key_Line_Start      10     // alt left
  302. #define FV_Key_Line_End        11     // alt right
  303. #define FV_Key_Object_Next     12     // tab
  304. #define FV_Key_Object_Prev     13     // shift tab
  305. #define FV_Key_Char_Back       14     // backspace
  306. #define FV_Key_Char_Del        15     // del
  307. #define FV_Key_Word_Back       16     // alt backspace
  308. #define FV_Key_Word_Del        17     // alt del
  309. #define FV_Key_Line_Back       18     // shift backspace
  310. #define FV_Key_Line_Del        19     // shift del
  311. #define FV_Key_Window_Close    20     // esc
  312. //+
  313.  
  314. /*** Root Object for most objects ******************************************/
  315.  
  316. /// Object                             0x000000
  317. #define FC_Object          "Object.fc"
  318.  
  319. #define FR_Object           0x000000
  320. #define FR_Object_Mthd      MTHD_BASE | FR_Object
  321. #define FR_Object_Attr      ATTR_BASE | FR_Object
  322.  
  323. #define FM_New                                      0xF0000000
  324. #define FM_Dispose                                  0xF0000001
  325. #define FM_Set                                      0xF0000002
  326. #define FM_Get                                      0xF0000003
  327. #define FM_Notify                                   0xF0000004
  328. #define FM_UnNotify                                 0xF0000005
  329. #define FM_UnNotifyAttr                             0xF0000006
  330. #define FM_MultiSet                                 0xF0000007
  331. #define FM_SetAsString                              0xF0000008
  332. #define FM_WriteLong                                0xF0000009
  333. #define FM_WriteString                              0xF000000A
  334. #define FM_CallDispatcher                           0xF000000B
  335.  
  336. #define FA_ID                                       0x8F000000
  337. #define FA_UserData                                 0x8F000001
  338. #define FA_NoNotify                                 0x8F000002
  339. #define FA_Parent                                   0x8F000003
  340. #define FA_Class                                    0x8F000004
  341. #define FA_Revision                                 0x8F000005
  342. #define FA_Version                                  0x8F000006
  343. #define FA_ClassID                                  0x8F000007
  344. #define FA_SuperID                                  0x8F000008
  345. #define FA_DataSize                                 0x8F000009
  346. #define FA_Dispatcher                               0x8F00000A
  347. #define FA_ClassInit                                0x8F00000B
  348. #define FA_ClassExit                                0x8F00000C
  349. #define FA_ClassData                                0x8F00000D
  350. #define FA_ClassPool                                0x8F00000E
  351.  
  352. long enum {
  353.     FV_Notify_None,
  354.     FV_Notify_Self,
  355.     FV_Notify_Parent,
  356.     FV_Notify_Window,
  357.     FV_Notify_Client,
  358.     FV_Notify_Always  = 0x49893131,
  359.     FV_Notify_Toggle  = 0x49893132
  360. };
  361.  
  362. #define FV_Notify_Value FV_Notify_Always
  363.  
  364. struct FeelinObject
  365. {
  366.     struct  FeelinNode             *Next;
  367.     struct  FeelinNode             *Prev;
  368. /* end of FeelinNode header */
  369.     struct  FeelinObject           *Parent;
  370.     ULONG                           ID;
  371.     ULONG                           UserData;
  372. };
  373. //+
  374.  
  375. /*** Servers ***************************************************************/
  376.  
  377. ///Server                             0x800000
  378. #define FC_Server          "Server.fc"
  379.  
  380. #define FR_Server           0x800000
  381. #define FR_Server_Mthd      MTHD_BASE | FR_Server
  382. #define FR_Server_Attr      ATTR_BASE | FR_Server
  383.  
  384. long enum {
  385.     FSA_Remove = FR_Server
  386. };
  387.  
  388. #define FA_Server_Port                              0x8F800000
  389.  
  390. struct FeelinServer {
  391.     struct Node                     ss_Link;
  392.     WORD                            ss_NestCount;
  393.     struct MinList                  ss_WaitQueue;
  394.     struct SemaphoreRequest         ss_MultipleLink;
  395.     struct Task                    *ss_Owner;
  396.     WORD                            ss_QueueCount;
  397. /* end of SignalSempahore header */
  398.     UWORD                           nReserved;
  399.     ULONG                           nOpenCount;
  400.     struct MsgPort                 *psPort;
  401.     struct FeelinNode               sNode;
  402. };
  403.  
  404. struct FeelinServerMessage {
  405.     struct Node                     mn_Node;
  406.     struct MsgPort                 *mn_ReplyPort;
  407.     UWORD                           mn_Length;
  408. /* end of Message Header */
  409.     UWORD                           Reserved;
  410.     ULONG                           nAction;
  411.     ULONG                          *pnArgs;
  412.     ULONG                           nReturn;
  413. };
  414. //+
  415. ///SystemServer                       0x800040
  416. #define FR_SystemServer         0x800040
  417. #define FR_SystemServer_Mthd    MTHD_BASE | FR_SystemServer
  418. #define FR_SystemServer_Attr    ATTR_BASE | FR_SystemServer
  419.  
  420. #define FM_SystemServer_OpenLibrary                 0xF0800040
  421. #define FM_SystemServer_CloseLibrary                0xF0800041
  422. #define FM_SystemServer_ObtainTags                  0xF0800042
  423. #define FM_SystemServer_MakeObject                  0xF0800043
  424. #define FM_SystemServer_OpenFont                    0xF0800044
  425. #define FM_SystemServer_CloseFont                   0xF0800045
  426. #define FM_SystemServer_ClipboardLoad               0xF0800046
  427. #define FM_SystemServer_ClipboardSave               0xF0800047
  428.  
  429. #define FA_SystemServer                             0x8F800040
  430. //+
  431. ///WindowServer                       0x800080
  432. #define FR_WindowServer         0x800080
  433. #define FR_WindowServer_Mthd    MTHD_BASE | FR_WindowServer
  434. #define FR_WindowServer_Attr    ATTR_BASE | FR_WindowServer
  435. #define FR_WindowServer_Actn    FR_WindowServer
  436.  
  437. #define FA_SharedIDCMPPort                          0x8F800080
  438. //+
  439. ///DisplayServer                      0x8000C0
  440. #define FR_DisplayServer        0x8000C0
  441. #define FR_DisplayServer_Mthd   MTHD_BASE | FR_DisplayServer
  442. #define FR_DisplayServer_Attr   ATTR_BASE | FR_DisplayServer
  443.  
  444. #define FM_DisplayServer_FindDisplay                0xF08000C0
  445. #define FM_DisplayServer_OpenDisplay                0xF08000C1
  446. #define FM_DisplayServer_CloseDisplay               0xF08000C2
  447. //+
  448.  
  449. /*** Tools *****************************************************************/
  450.  
  451. /// Tool                               0x700000
  452. #define FC_Tool "Tool.fc"
  453.  
  454. #define FR_Tool        0x700000
  455. #define FR_Tool_Mthd   MTHD_BASE | FR_Tool
  456. #define FR_Tool_Attr   ATTR_BASE | FR_Tool
  457.  
  458. #define FA_Tool_Owner                               0x8F700000
  459.  
  460. struct FeelinTool {
  461.     struct  FeelinObject           *Owner;
  462. };
  463. //+
  464. /// Family                             0x700040
  465. #define FC_Family           "Family.fc"
  466. #define FamilyObject        F_NewObj(FC_Family
  467.  
  468. #define FR_Family           0x700040
  469. #define FR_Family_Mthd      MTHD_BASE | FR_Family
  470. #define FR_Family_Attr      ATTR_BASE | FR_Family
  471.  
  472. #define FM_Family_AddTail                           0xF0700040
  473. #define FM_Family_Remove                            0xF0700041
  474. #define FM_Family_AddHead                           0xF0700042
  475. #define FM_Family_Insert                            0xF0700043
  476. #define FM_Family_Sort                              0xF0700044
  477. #define FM_Family_Transfer                          0xF0700045
  478. #define FM_AddMember                                0xF0700040
  479. #define FM_RemMember                                0xF0700041
  480.  
  481. #define FA_Child                                    0x8F700040
  482. #define FA_Family                                   0x8F700041
  483. #define FA_Family_List                              0x8F700042
  484. #define FA_Family_Head                              0x8F700043
  485. #define FA_Family_Tail                              0x8F700044
  486.  
  487. struct FeelinFamily { /*OF FeelinTool*/
  488.     struct  FeelinObject           *Owner;
  489. /*  end of FeelinTool header */
  490.     struct  FeelinObject           *Head;
  491.     struct  FeelinObject           *Tail;
  492. };
  493. //+
  494. /// Numeric                            0x700080
  495. #define FC_Numeric      "Numeric.fc"
  496. #define NumericObject   F_NewObj(FC_Numeric
  497.  
  498. #define FR_Numeric        0x700080
  499. #define FR_Numeric_Mthd   MTHD_BASE | FR_Numeric
  500. #define FR_Numeric_Attr   ATTR_BASE | FR_Numeric
  501.  
  502. #define FM_Numeric_Increase                         0xF0700080
  503. #define FM_Numeric_Decrease                         0xF0700081
  504. #define FM_Numeric_Stringify                        0xF0700082
  505. #define FM_Numeric_Reset                            0xF0700083
  506.  
  507. #define FA_Numeric_Default                          0x8F700080
  508. #define FA_Numeric_Value                            0x8F700081
  509. #define FA_Numeric_Min                              0x8F700082
  510. #define FA_Numeric_Max                              0x8F700083
  511. #define FA_Numeric_Step                             0x8F700084
  512. #define FA_Numeric_Format                           0x8F700085
  513. #define FA_Numeric_Formula                          0x8F700086
  514. #define FA_Numeric_Multiply                         0x8F700087
  515. #define FA_Numeric_Divide                           0x8F700088
  516.  
  517. #ifdef FEELIN_DEV
  518. struct FeelinNumeric {/*OF feelinTool*/
  519.     struct  FeelinObject           *Owner;
  520. /* end of FeelinTool header */
  521.     LONG                            Default;
  522.     LONG                            Value;
  523.     LONG                            Min;
  524.     LONG                            Max;
  525.     LONG                            Step;
  526.     STRPTR                          String;
  527.     STRPTR                          Format;
  528. };
  529. #endif
  530. //+
  531. /// FrameDisplay                       0x7000C0
  532. #define FC_FrameDisplay        "FrameDisplay.fc"
  533. #define FR_FrameDisplay         0x7000C0
  534. #define FR_FrameDisplay_Mthd    MTHD_BASE | FR_FrameDisplay
  535. #define FR_FrameDisplay_Attr    ATTR_BASE | FR_FrameDisplay
  536. #define FR_FrameDisplay_Pref    PREF_BASE | FR_FrameDisplay
  537.  
  538. #define FrameDisplayObject      F_NewObj(FC_FrameDisplay
  539.  
  540. /* Methods */
  541.  
  542. #define FM_FrameDisplay_Draw                        0xF07000C0
  543.  
  544. /* Attributes */
  545.  
  546. #define FA_Frame                                    0x8F7000C0
  547. #define FA_AltFrame                                 0x8F7000C1
  548. #define FA_Back                                     0x8F7000C2
  549. #define FA_AltBack                                  0x8F7000C3
  550. #define FA_Frame_Font                               0x8F7000C4
  551. #define FA_Frame_Title                              0x8F7000C5
  552. #define FA_Frame_PreParse                           0x8F7000C6
  553. #define FA_Frame_Position                           0x8F7000C7
  554.  
  555. /* Preference Items */
  556.  
  557. #define FP_Frame_Font                               0x507000C0
  558. #define FP_Frame_PreParse                           0x507000C1
  559. #define FP_Frame_Position                           0x507000C2
  560. #define FP_Frame_Window                             0x507000C3
  561. #define FP_Frame_Group                              0x507000C4
  562. #define FP_Frame_Button                             0x507000C5
  563. #define FP_Frame_Cycle                              0x507000C6
  564. #define FP_Frame_Slider                             0x507000C7
  565. #define FP_Frame_SliderKnob                         0x507000C8
  566. #define FP_Frame_Scroller                           0x507000C9
  567. #define FP_Frame_Listview                           0x507000CA
  568. #define FP_Frame_ListXxx                            0x507000CB
  569. #define FP_Frame_String                             0x507000CC
  570. #define FP_Frame_Text                               0x507000CD
  571. #define FP_Frame_Gauge                              0x507000CE
  572. #define FP_Frame_Prop                               0x507000CF
  573.  
  574. /* Special values */
  575.  
  576. #define FV_Frame_None                   NULL
  577. #define FV_Frame_LastBuiltin            255L
  578. #define FF_Frame_InheritedBackground    (1L << 00)
  579. #define FF_Frame_TitleDown              (1L << 01)
  580. #define FF_Frame_Fill                   (1L << 00)
  581.  
  582. enum {                                  /* FA_Frame_Position */
  583.    FV_Frame_UpLeft,
  584.    FV_Frame_UpRight,
  585.    FV_Frame_UpCenter,
  586.    FV_Frame_DownLeft,
  587.    FV_Frame_DownRight,
  588.    FV_Frame_DownCenter
  589. };
  590.  
  591. struct FeelinInner  { UBYTE l,t,r,b; };
  592.  
  593. #define FS_Inner    FeelinInner
  594.  
  595. struct FeelinFrameDisplay
  596. {
  597.     struct FeelinObject            *paOwner;
  598. /* end of FeelinTool header */
  599.     APTR                            paBackground;
  600.     struct FS_Inner                 psInners[2];
  601.     UWORD                           nFlags;
  602. };
  603.  
  604. struct FS_FrameDisplay_Draw { struct FeelinRect *Rect; struct FeelinRender *Render; ULONG Flags; };
  605.  
  606. #ifdef FEELIN_DEV
  607. struct FeelinFrameSpec
  608. {
  609.    UWORD id,aid; ULONG space,aspace;
  610. };
  611. #endif
  612.  
  613. #define NoFrame         FA_Frame,FV_Frame_None
  614. #define ButtonFrame     FA_Frame,FP_Frame_Button
  615. #define TextFrame       FA_Frame,FP_Frame_Text
  616. #define StringFrame     FA_Frame,FP_Frame_String
  617. #define PropFrame       FA_Frame,FP_Frame_Prop
  618. #define SliderFrame     FA_Frame,FP_Frame_Slider
  619. #define GaugeFrame      FA_Frame,FP_Frame_Gauge
  620. #define GroupFrame      FA_Frame,FP_Frame_Group
  621. //+
  622.  
  623. /*** GUI System ************************************************************/
  624.  
  625. /// Client                             0x004000
  626. #define FC_Client         "Client.fc"
  627. #define ClientObject       F_NewObj(FC_Client
  628.  
  629. #define FR_Client       0x004000
  630. #define FR_Client_Mthd  MTHD_BASE | FR_Client
  631. #define FR_Client_Attr  ATTR_BASE | FR_Client
  632.  
  633. #define FM_Client_Run                               0xF0004000
  634. #define FM_Client_Event                             0xF0004001
  635. #define FM_Client_WaitEvent                         0xF0004002
  636. #define FM_Client_ReturnID                          0xF0004003
  637. #define FM_Client_AddSignalHandler                  0xF0004004
  638. #define FM_Client_RemSignalHandler                  0xF0004005
  639. #define FM_Client_Resolve                           0xF0004006
  640. #define FM_Client_OpenFont                          0xF0004007
  641. #define FM_Client_Load                              0xF0004008
  642. #define FM_Client_Save                              0xF0004009
  643.  
  644. #define FA_Client                                   0x8F004000
  645. #define FA_Client_Title                             0x8F004001
  646. #define FA_Client_Version                           0x8F004002
  647. #define FA_Client_Copyright                         0x8F004003
  648. #define FA_Client_Author                            0x8F004004
  649. #define FA_Client_Description                       0x8F004005
  650. #define FA_Client_Base                              0x8F004006
  651. #define FA_Client_Unique                            0x8F004007
  652. #define FA_Client_Signal                            0x8F004008
  653. #define FA_Client_UserSignals                       0x8F004009
  654. #define FA_Client_WindowPort                        0x8F00400A
  655. #define FA_Client_BrokerPort                        0x8F00400B
  656. #define FA_Client_BrokerHook                        0x8F00400C
  657. #define FA_Client_BrokerPri                         0x8F00400D
  658. #define FA_Client_Broker                            0x8F00400E
  659. #define FA_Client_GUISpace                          0x8F00400F
  660. #define FA_Client_OBJSpace                          0x8F004010
  661. #define FA_Client_Context                           0x8F004011
  662.  
  663. #define FV_Client_Quit      -1L
  664.  
  665. enum {
  666.     FV_Client_ENV,
  667.     FV_Client_ENVARC,
  668.     FV_Client_BOTH
  669. };
  670.  
  671. struct FeelinSignalHandler
  672. {
  673.     struct  FeelinSignalHandler    *Next;
  674.     struct  FeelinSignalHandler    *Prev;
  675. /* end of FeelinNode header */
  676.     ULONG                           Flags;
  677.     struct  FeelinObject           *Object;
  678.     ULONG                           Method;
  679.  
  680.     ULONG                           Signals;  /* Secs */
  681.     ULONG                           Reserved; /* Micros */
  682. /*
  683.     union
  684.     {
  685.         struct
  686.         {
  687.             ULONG   Signals;
  688.             ULONG   Reserved;
  689.         } sig;
  690.  
  691.         struct
  692.         {
  693.             ULONG   Secs;
  694.             ULONG   Micros;
  695.         } timer;
  696.     }
  697. */
  698. };
  699.  
  700. #define FF_SignalHandler_Timer      (1L << 00)
  701.  
  702. struct FS_Resolve  { ULONG ID; ULONG *Storage; };
  703. struct FS_OpenFont { struct FeelinObject *Obj; ULONG Type; };
  704. //+
  705. /// Window                             0x004040
  706. #define FC_Window          "Window.fc"
  707. #define WindowObject        F_NewObj(FC_Window
  708.  
  709. #define FR_Window       0x004040
  710. #define FR_Window_Mthd  MTHD_BASE | FR_Window
  711. #define FR_Window_Attr  ATTR_BASE | FR_Window
  712. #define FR_Window_Pref  PREF_BASE | FR_Window
  713.  
  714. #define FM_Window_Event                             0xF0004040
  715. #define FM_Window_ChainAdd                          0xF0004041
  716. #define FM_Window_ChainRem                          0xF0004042
  717. #define FM_Window_AddEventHandler                   0xF0004043
  718. #define FM_Window_RemEventHandler                   0xF0004044
  719. #define FM_Window_Layout                            0xF0004045
  720. #define FM_Window_Draw                              0xF0004046
  721. #define FM_Window_CreateDragDrop                    0xF0004047
  722.  
  723. #define FA_Window                                   0x8F004040
  724. #define FA_Window_Title                             0x8F004041
  725. #define FA_Window_ScreenTitle                       0x8F004042
  726. #define FA_Window_Open                              0x8F004043
  727. #define FA_Window_CloseRequest                      0x8F004044
  728. #define FA_Window_Active                            0x8F004045
  729. #define FA_Window_ActiveObject                      0x8F004046
  730. #define FA_Window_Backdrop                          0x8F004047
  731. #define FA_Window_Borderless                        0x8F004048
  732. #define FA_Window_CloseGadget                       0x8F004049
  733. #define FA_Window_DepthGadget                       0x8F00404A
  734. #define FA_Window_SizeGadget                        0x8F00404B
  735. #define FA_Window_DragBar                           0x8F00404C
  736. #define FA_Window_MouseObject                       0x8F00404D
  737. #define FA_Window_Renderer                          0x8F00404E
  738. #define FA_Window_HandlePopHelp                     0x8F00404F
  739.  
  740. #define FP_Font_Window                              0x50004040
  741. #define FP_Window_Renderer                          0x50004041
  742. #define FP_Window_PopHelpDelay                      0x50004042
  743.  
  744. long enum {
  745.     FV_Window_ActiveObject_Prev = -2,
  746.     FV_Window_ActiveObject_Next,
  747.     FV_Window_ActiveObject_None
  748. };
  749.  
  750. /*** Window / FS_Render ****************************************************/
  751.  
  752. #define FeelinRender                FS_Render // backward compatibility
  753.  
  754. struct FeelinRender {
  755.     struct FeelinServer             *psSystemServer;
  756.     struct FeelinObject             *paClientObject;     // Valid between FM_Setup / FM_Cleanup
  757.     struct FeelinObject             *paWindowObject;     // Valid between FM_Setup / FM_Cleanup
  758.     struct FeelinDisplayContext     *psContext;          // Valid between FM_Setup / FM_Cleanup
  759.     struct Window                   *psWindow;           // Valid between FM_Show  / FM_Hide
  760.     struct RastPort                 *psRPort;            // Valid between FM_Show  / FM_Hide
  761.     ULONG                           *pnPens;             // Set at will
  762.     ULONG                             nFlags;
  763. };
  764.  
  765. #define FF_Render_Refreshing        (1L << 00)
  766. #define FF_Render_Forbid            (1L << 01)
  767.  
  768. /*** Window / FS_EventHandler **********************************************/
  769.  
  770. #define FeelinEventHandler          FS_EventHandler // backward compatibility
  771.  
  772. struct FS_EventHandler {
  773.     struct FS_EventHandler         *Next;
  774.     struct FS_EventHandler         *Prev;
  775. /* end of FeelinNode header */
  776.     UWORD                           Flags;
  777.     BYTE                            Priority;       // Linked by priority
  778.     UBYTE                           Reserved;
  779.     ULONG                           Events;         // One or more IDCMP flags this handler should react on
  780.     APTR                            Object;         // Object which should receive FM_HandleEvent
  781.     struct FeelinClass             *Class;          // If class <> NIL then class will be called instead of object.class
  782. };
  783.  
  784. #define FF_HandleEvent_Eat          (1L << 00)
  785. //+
  786. /*** GUI Classes ***********************************************************/
  787.  
  788. /// Area                               0x000040
  789. #define FC_Area               "Area.fc"
  790. #define AreaObject            F_NewObj(FC_Area
  791. #define InputImmediate        FA_InputMode,FV_InputMode_Immediate
  792. #define InputRelease          FA_InputMode,FV_InputMode_Release
  793. #define InputToggle           FA_InputMode,FV_InputMode_Toggle
  794. #define DontChain             FA_ChainToCycle,FALSE
  795. #define HorizLayout           FA_Horizontal,TRUE
  796.  
  797. #define FR_Area         0x000040
  798. #define FR_Area_Mthd    MTHD_BASE | FR_Area
  799. #define FR_Area_Attr    ATTR_BASE | FR_Area
  800. #define FR_Area_Pref    PREF_BASE | FR_Area
  801.  
  802. #define FM_Setup                                    0xF0000040
  803. #define FM_Cleanup                                  0xF0000041
  804. #define FM_Show                                     0xF0000042
  805. #define FM_Hide                                     0xF0000043
  806. #define FM_AskMinMax                                0xF0000044
  807. #define FM_Layout                                   0xF0000045
  808. #define FM_Draw                                     0xF0000046
  809. #define FM_DrawBackground                           0xF0000047
  810. #define FM_HandleEvent                              0xF0000048
  811. #define FM_Active                                   0xF0000049
  812. #define FM_Inactive                                 0xF000004A
  813. #define FM_ModifyHandler                            0xF000004B
  814. #define FM_BuildContextMenu                         0xF000004C
  815. #define FM_BuildContextHelp                         0xF000004D
  816. #define FM_DragQuery                                0xF000004E
  817. #define FM_DragBegin                                0xF000004F
  818. #define FM_DragFinish                               0xF0000050
  819. #define FM_DragReport                               0xF0000051
  820. #define FM_DragDrop                                 0xF0000052
  821.  
  822. #define FA_Area                                     0x8F000040
  823. #define FA_Left                                     0x8F000041
  824. #define FA_Top                                      0x8F000042
  825. #define FA_Right                                    0x8F000043
  826. #define FA_Bottom                                   0x8F000044
  827. #define FA_Width                                    0x8F000045
  828. #define FA_Height                                   0x8F000046
  829. #define FA_Inner                                    0x8F000047
  830. #define FA_Inner_Left                               0x8F000048
  831. #define FA_Inner_Top                                0x8F000049
  832. #define FA_Inner_Right                              0x8F00004A
  833. #define FA_Inner_Bottom                             0x8F00004B
  834. #define FA_Inner_Width                              0x8F00004C
  835. #define FA_Inner_Height                             0x8F00004D
  836. #define FA_MinWidth                                 0x8F00004E
  837. #define FA_MinHeight                                0x8F00004F
  838. #define FA_MaxWidth                                 0x8F000050
  839. #define FA_MaxHeight                                0x8F000051
  840. #define FA_FixWidth                                 0x8F000052
  841. #define FA_FixHeight                                0x8F000053
  842. #define FA_FixWidthTxt                              0x8F000054
  843. #define FA_FixHeightTxt                             0x8F000055
  844. #define FA_Fixed                                    0x8F000056
  845. #define FA_FixedWidth                               0x8F000057
  846. #define FA_FixedHeight                              0x8F000058
  847. #define FA_Active                                   0x8F000059
  848. #define FA_Selected                                 0x8F00005A
  849. #define FA_Pressed                                  0x8F00005B
  850. #define FA_Hidden                                   0x8F00005C
  851. #define FA_Disabled                                 0x8F00005D
  852. #define FA_Draggable                                0x8F00005E
  853. #define FA_Dropable                                 0x8F00005F
  854. #define FA_Timer                                    0x8F000060
  855. #define FA_Font                                     0x8F000061
  856. #define FA_FillArea                                 0x8F000062
  857. #define FA_Weight                                   0x8F000063
  858. #define FA_Horizontal                               0x8F000064
  859. #define FA_InputMode                                0x8F000065
  860. #define FA_ControlChar                              0x8F000066
  861. #define FA_ChainToCycle                             0x8F000067
  862. #define FA_WindowObject                             0x8F000068
  863. #define FA_HiddenPage                               0x8F000069
  864.  
  865. long enum {
  866.     FV_InputMode_None = 0,
  867.     FV_InputMode_Immediate,
  868.     FV_InputMode_Release,
  869.     FV_InputMode_Toggle
  870. };
  871.  
  872. long enum {
  873.     FV_Font_Inherit = -1
  874. };
  875.  
  876. #define FP_Font_Normal                              0x50000040
  877. #define FP_Font_Tiny                                0x50000041
  878. #define FP_Font_Big                                 0x50000042
  879. #define FP_Font_Fixed                               0x50000043
  880. #define FP_Font_Button                              0x50000044
  881.  
  882. #define FF_Horizontal          (1L << 00)
  883. #define FF_Area_Selected       (1L << 01)
  884. #define FF_Area_Pressed        (1L << 02)
  885. #define FF_Area_Hidden         (1L << 03)
  886. #define FF_Area_Disabled       (1L << 04)
  887. #define FF_Area_Draggable      (1L << 05)
  888. #define FF_Area_Dropable       (1L << 06)
  889. #define FF_Area_FixedWidth     (1L << 07)
  890. #define FF_Area_FixedHeight    (1L << 08)
  891. #define FF_Area_Fixed          FF_Area_FixedWidth | FF_Area_FixedHeight
  892. #define FF_Area_Active         (1L << 09)
  893. #define FF_Area_HiddenPage     (1L << 10)
  894. #define FF_ChainToCycle        (1L << 11)
  895. #define FF_FillArea            (1L << 12)
  896.  
  897. #define FF_Custom_1            (1L << 25)
  898. #define FF_Custom_2            (1L << 26)
  899. #define FF_Custom_3            (1L << 27)
  900. #define FF_Custom_4            (1L << 28)
  901. #define FF_Custom_5            (1L << 29)
  902. #define FF_Custom_6            (1L << 30)
  903. #define FF_Custom_7            (1L << 31)
  904. #define FF_Custom_8            (1L << 32)
  905.  
  906. #define FF_Draw_Object         (1L << 00)
  907. #define FF_Draw_Update         (1L << 01)
  908. #define FF_Draw_Fill           (1L << 02)
  909. #define FF_Draw_Custom_1       (1L << 25)
  910. #define FF_Draw_Custom_2       (1L << 26)
  911. #define FF_Draw_Custom_3       (1L << 27)
  912. #define FF_Draw_Custom_4       (1L << 28)
  913. #define FF_Draw_Custom_5       (1L << 29)
  914. #define FF_Draw_Custom_6       (1L << 30)
  915. #define FF_Draw_Custom_7       (1L << 31)
  916. #define FF_Draw_Custom_8       (1L << 32)
  917.  
  918. #define FV_MAXMAX 10000L
  919.  
  920. #define FeelinRect              FS_Rect // Backward compatibility
  921. #define FS_Box                  FeelinBox
  922. #define FS_MinMax               FeelinMinMax
  923.  
  924. //struct FeelinRect   { UWORD x1,y1,x2,y2; };
  925. struct FeelinBox    { UWORD x,y,w,h; };
  926. struct FeelinMinMax { UWORD MinW,MinH,MaxW,MaxH; };
  927.  
  928. struct FS_Rect {
  929.     UWORD                           x1,y1,x2,y2;
  930. };
  931.  
  932. /* Object */
  933.  
  934. struct FeelinArea {
  935.     struct  FeelinObject            ObjectNode;
  936.     ULONG                           Flags;
  937.     struct  FeelinRender           *Render;
  938.  
  939. //    struct  FeelinRect              Area;
  940.     struct  FS_Box                  Box;
  941.     struct  FS_Inner                Inner;
  942.     struct  FeelinMinMax            MinMax;
  943.  
  944.     ULONG                          *Pens;
  945.     struct  TextFont               *Font;
  946.     struct  FeelinEventHandler     *Handler;
  947.     UWORD                           Weight;
  948. /* Private data below */
  949. };
  950.  
  951. struct FS_Draw             { ULONG Flags; };
  952. struct FS_DrawBackground   { UWORD x1,y1,x2,y2; ULONG Flags; };
  953. struct FS_Setup            { struct FeelinRender *Render; };
  954. struct FS_HandleEvent      { struct IntuiMessage *Msg; ULONG Key; };
  955. struct FS_DragQuery        { struct FeelinObject *Source; LONG MouseX, MouseY; };
  956. struct FS_BuildContextHelp { LONG MouseX, MouseY;STRPTR Help; };
  957. struct FS_BuildContextMenu { LONG MouseX, MouseY;struct FeelinObject *Menu; struct FeelinObject *ContextOwner; struct FeelinRender *Render; };
  958. //+
  959. ///Image                              0x000080
  960. #define FC_Image        "Image.fc"
  961. #define ImageObject     F_NewObj(FC_Image
  962.  
  963. #define FR_Image        0x000080
  964. #define FR_Image_Mthd   MTHD_BASE | FR_Image
  965. #define FR_Image_Attr   ATTR_BASE | FR_Image
  966.  
  967. #define FA_Image                                    0x8F000080
  968. #define FA_AltImage                                 0x8F000081
  969. #define FA_Image_Width                              0x8F000082
  970. #define FA_Image_Height                             0x8F000083
  971. #define FA_Image_Precision                          0x8F000084
  972. #define FA_Image_State                              0x8F000085
  973.  
  974. long enum {
  975.     FV_Image_Normal,
  976.     FV_Image_Selected,
  977.     FV_Image_Enabled,
  978.     FV_Image_Disabled
  979. };
  980. //+
  981. /// Text                               0x0000C0
  982. #define FC_Text     "Text.fc"
  983. #define TextObject  F_NewObj(FC_Text
  984.  
  985. #define FR_Text        0x0000C0
  986. #define FR_Text_Mthd   MTHD_BASE | FR_Text
  987. #define FR_Text_Attr   ATTR_BASE | FR_Text
  988.  
  989. #define FA_Text                                     0x8F900080
  990. #define FA_Text_PreParse                            0x8F900081
  991. #define FA_Text_AltPreParse                         0x8F0000C0
  992. #define FA_Text_SetMin                              0x8F0000C1
  993. #define FA_Text_HCenter                             0x8F0000C2
  994. #define FA_Text_VCenter                             0x8F0000C3
  995. #define FA_Text_Static                              0x8F0000C4
  996.  
  997. //+
  998. ///Bar                                0x000100
  999. #define FC_Bar      "Bar.fc"
  1000. #define BarObject    F_NewObj(FC_Bar
  1001.  
  1002. #define FR_Bar          0x000100
  1003. #define FR_Bar_Mthd     MTHD_BASE | FR_Bar
  1004. #define FR_Bar_Attr     ATTR_BASE | FR_Bar
  1005. #define FR_Bar_Pref     PREF_BASE | FR_Bar
  1006.  
  1007. #define FA_Bar_Title        0x8F000100
  1008. #define FA_Bar_PreParse     0x8F000101
  1009.  
  1010. #define FP_Bar_PreParse     0x50000100
  1011. //+
  1012. ///Gauge                              0x000140
  1013. #define FC_Gauge       "Gauge.fc"
  1014. #define GaugeObject     F_NewObj(FC_Gauge
  1015.  
  1016. #define FR_Gauge        0x000140
  1017. #define FR_Gauge_Mthd   MTHD_BASE | FR_Gauge
  1018. #define FR_Gauge_Attr   ATTR_BASE | FR_Gauge
  1019.  
  1020. #define FA_Gauge_Simple     0x8F000140
  1021. #define FA_Gauge_Info       0x8F000141
  1022. //+
  1023. /// Balance                            0x000280
  1024. #define FC_Balance        "Balance.fc"
  1025. #define BalanceObject      F_NewObj(FC_Balance
  1026. #define BalanceID(id)      F_NewObj(FC_Balance,[FA_ID,id,TAG_DONE])
  1027.  
  1028. #define FR_Balance          0x000280
  1029. #define FR_Balance_Mthd     MTHD_BASE | FR_Balance
  1030. #define FR_Balance_Attr     ATTR_BASE | FR_Balance
  1031. #define FR_Balance_Pref     PREF_BASE | FR_Balance
  1032.  
  1033. #define FA_Balance_QuickDraw                        0x8F000280
  1034.  
  1035. #define FP_Balance_QuickDraw                        0x50000280
  1036. //+
  1037.  
  1038. /// Group                              0x001000
  1039. #define FC_Group     "Group.fc"
  1040. #define GroupObject  F_NewObj(FC_Group
  1041. #define VGroup       F_NewObj(FC_Group,FA_ChainToCycle,FALSE
  1042. #define HGroup       F_NewObj(FC_Group,FA_ChainToCycle,FALSE,FA_Horizontal,TRUE
  1043. #define Page         F_NewObj(FC_Group,FA_ChainToCycle,TRUE,FA_Group_PageMode,TRUE
  1044.  
  1045. #define FR_Group        0x001000
  1046. #define FR_Group_Mthd   MTHD_BASE | FR_Group
  1047. #define FR_Group_Attr   ATTR_BASE | FR_Group
  1048. #define FR_Group_Pref   PREF_BASE | FR_Group
  1049.  
  1050. #define FA_Group_HSpacing                           0x8F001000
  1051. #define FA_Group_VSpacing                           0x8F001001
  1052. #define FA_Group_SameWidth                          0x8F001002
  1053. #define FA_Group_SameHeight                         0x8F001003
  1054. #define FA_Group_SameSize                           0x8F001004
  1055. #define FA_Group_RelSizing                          0x8F001005
  1056. #define FA_Group_Rows                               0x8F001006
  1057. #define FA_Group_Forward                            0x8F001007
  1058. #define FA_Group_PageMode                           0x8F001008
  1059. #define FA_Group_PageTitles                         0x8F001009
  1060. #define FA_Group_PageFont                           0x8F00100A
  1061. #define FA_Group_PageStyle                          0x8F00100B
  1062. #define FA_Group_ActivePage                         0x8F00100C
  1063.  
  1064. #define FP_Group_PageFont                           0x50001000
  1065. #define FP_Group_HSpacing                           0x50001001
  1066. #define FP_Group_VSpacing                           0x50001002
  1067. #define FP_Group_PageStyle                          0x50001003
  1068.  
  1069. long enum {
  1070.     FV_Group_ActivePage_Prev = -4,
  1071.     FV_Group_ActivePage_Next,
  1072.     FV_Group_ActivePage_Last,
  1073.     FV_Group_ActivePage_First
  1074. };
  1075. //+
  1076.  
  1077. /*** Other Classes *********************************************************/
  1078.  
  1079. /// ImageDisplay                       0x900040 / Image
  1080. #define FC_ImageDisplay          "ImageDisplay.fc"
  1081. #define ImageDisplayObject       F_NewObj(FC_ImageDisplay
  1082.  
  1083. #define FR_ImageDisplay         0x900040
  1084. #define FR_ImageDisplay_Mthd    MTHD_BASE | FR_ImageDisplay
  1085. #define FR_ImageDisplay_Attr    ATTR_BASE | FR_ImageDisplay
  1086. #define FR_ImageDisplay_Pref    PREF_BASE | FR_ImageDisplay
  1087.  
  1088. #define FM_ImageDisplay_Draw                        0xF0900040
  1089. #define FM_ImageDisplay_Setup                       0xF0900041
  1090. #define FM_ImageDisplay_Cleanup                     0xF0900042
  1091.  
  1092. #define FA_ImageDisplay                             0x8F900040
  1093.  
  1094. struct FS_ImageDisplay_Render  {struct FeelinRender *Render; };
  1095. struct FS_ImageDisplay_Draw    {struct FeelinRect *Rect; struct FeelinRender *Render; };
  1096.  
  1097. long enum {
  1098.     FI_None,
  1099.     FI_Shine,               FI_HalfShine,              FI_Fill,             FI_HalfShadow,             FI_Shadow,           FI_HalfDark,            FI_Dark,             FI_Highlight,
  1100.     FI_Shine_HalfShine,     FI_HalfShine_Fill,         FI_Fill_HalfShadow,  FI_HalfShadow_Shadow,      FI_Shadow_HalfDark,  FI_HalfDark_Dark,       FI_Dark_Highlight,
  1101.     FI_Shine_Fill,          FI_HalfShine_HalfShadow,   FI_Fill_Shadow,      FI_HalfShadow_HalfDark,    FI_Shadow_Dark,      FI_HalfDark_Highlight,
  1102.     FI_Shine_HalfShadow,    FI_HalfShine_Shadow,       FI_Fill_HalfDark,    FI_HalfShadow_Dark,        FI_Shadow_Highlight,
  1103.     FI_Shine_Shadow,        FI_HalfShine_HalfDark,     FI_Fill_Dark,        FI_HalfShadow_Highlight,
  1104.     FI_Shine_HalfDark,      FI_HalfShine_Dark,         FI_Fill_Highlight,
  1105.     FI_Shine_Dark,          FI_HalfShine_Highlight,
  1106.     FI_Shine_Highlight
  1107. };
  1108.  
  1109. #define FP_Back_Window                              0x50900040
  1110. #define FP_Back_Screen                              0x50900041
  1111. #define FP_Back_Requester                           0x50900042
  1112. #define FP_Back_Group                               0x50900043
  1113. #define FP_Back_Button                              0x50900044
  1114. #define FP_Back_ButtonAlt                           0x50900045
  1115. #define FP_Back_Text                                0x50900046
  1116. #define FP_Back_String                              0x50900047
  1117. #define FP_Back_StringAlt                           0x50900048
  1118. #define FP_Back_List                                0x50900049
  1119. #define FP_Back_Prop                                0x5090004A
  1120. #define FP_Back_Slider                              0x5090004B
  1121. #define FP_Back_Gauge                               0x5090004C
  1122. #define FP_Back_Pop                                 0x5090004D
  1123. #define FP_Back_Page                                0x5090004E
  1124.  
  1125. #define NoBack          FA_Back, FI_None
  1126.  
  1127. #define WindowBack      FA_Back, FP_Back_Window
  1128. #define ScreenBack      FA_Back, FP_Back_Screen
  1129. #define RequesterBack   FA_Back, FP_Back_Requester
  1130. #define GroupBack       FA_Back, FP_Back_Group
  1131. #define TextBack        FA_Back, FP_Back_Text
  1132. #define StringBack      FA_Back, FP_Back_String, FA_AltBack,FP_Back_StringAlt
  1133. #define ButtonBack      FA_Back, FP_Back_Button, FA_AltBack,FP_Back_ButtonAlt
  1134. #define GaugeBack       FA_Back, FP_Back_Gauge
  1135. #define ListBack        FA_Back, FP_Back_List
  1136. #define PropBack        FA_Back, FP_Back_Prop
  1137. #define SliderBack      FA_Back, FP_Back_Slider
  1138. #define PopBack         FA_Back, FP_Back_Pop
  1139. //+
  1140. /// TextDisplay                        0x900080 / Text
  1141. #define FC_TextDisplay        "TextDisplay.fc"
  1142. #define FS_TextDisplay_Size   FeelinS_TextDisplay_Size
  1143. #define FS_TextDisplay_Draw   FeelinS_ImageDisplay_Draw
  1144. #define TextDisplayObject     F_NewObj(FC_TextDisplay
  1145.  
  1146. #define FR_TextDisplay       0x900080
  1147. #define FR_TextDisplay_Mthd  MTHD_BASE | FR_TextDisplay
  1148. #define FR_TextDisplay_Attr  ATTR_BASE | FR_TextDisplay
  1149.  
  1150. #define FM_TextDisplay_Size                         0xF0900080
  1151. #define FM_TextDisplay_Draw                         0xF0900040
  1152.  
  1153. #define FA_TextDisplay_Contents                     0x8F900080
  1154. #define FA_TextDisplay_PreParse                     0x8F900081
  1155. #define FA_TextDisplay_Font                         0x8F900082
  1156. #define FA_TextDisplay_Width                        0x8F900083
  1157. #define FA_TextDisplay_Height                       0x8F900084
  1158. #define FA_TextDisplay_Interline                    0x8F900085
  1159. #define FA_TextDisplay_Overflow                     0x8F900086
  1160. #define FA_TextDisplay_Align                        0x8F900087
  1161. #define FA_TextDisplay_Style                        0x8F900088
  1162. #define FA_TextDisplay_APen                         0x8F900089
  1163. #define FA_TextDisplay_BPen                         0x8F90008A
  1164. #define FA_TextDisplay_UnderShort                   0x8F90008B
  1165.  
  1166. long enum {
  1167.     FV_TextDisplay_Left,
  1168.     FV_TextDisplay_Center,
  1169.     FV_TextDisplay_Right,
  1170.     FV_TextDisplay_Justify
  1171. };
  1172.  
  1173. #define FV_TextDisplay_Plain        (1L << 00)
  1174. #define FF_TextDisplay_Bold         (1L << 01)
  1175. #define FF_TextDisplay_Italic       (1L << 02)
  1176. #define FF_TextDisplay_Underlined   (1L << 03)
  1177. #define FV_TextDisplay_Simple       (1L << 04)
  1178. #define FF_TextDisplay_Shadow       (1L << 05)
  1179. #define FF_TextDisplay_Light        (1L << 06)
  1180. #define FF_TextDisplay_Emboss       (1L << 07)
  1181. #define FF_TextDisplay_Ghost        (1L << 08)
  1182.  
  1183. struct FeelinS_TextDisplay_Size { struct FeelinRect *Rect; };
  1184.  
  1185. struct FeelinTextDisplay {
  1186.     UWORD                           nWidth;
  1187.     UWORD                           nHeight;
  1188. };
  1189. //+
  1190. /// Dataspace                          0x9000C0 / Client
  1191. #define FC_Dataspace       "Dataspace.fc"
  1192. #define DataspaceObject     F_NewObj(FC_Dataspace
  1193.  
  1194. #define FR_Dataspace        0x9000C0
  1195. #define FR_Dataspace_Mthd   MTHD_BASE | FR_Dataspace
  1196. #define FR_Dataspace_Attr   ATTR_BASE | FR_Dataspace
  1197.  
  1198. #define FM_Dataspace_Add                            0xF09000C0
  1199. #define FM_Dataspace_Remove                         0xF09000C1
  1200. #define FM_Dataspace_Find                           0xF09000C2
  1201. #define FM_Dataspace_Clear                          0xF09000C3
  1202. #define FM_Dataspace_Merge                          0xF09000C4
  1203. #define FM_Dataspace_ReadIFF                        0xF09000C5
  1204. #define FM_Dataspace_WriteIFF                       0xF09000C6
  1205. #define FM_Dataspace_Resolve                        0xF09000C7
  1206.  
  1207. #define FA_Dataspace_Pool                           0x8F9000C0
  1208. //+
  1209. /// DisplayContext                     0x900140 / Client
  1210. #define FC_DisplayContext "DisplayContext.fc"
  1211.  
  1212. #define FR_DisplayContext       0x900140
  1213. #define FR_DisplayContext_Mthd  MTHD_BASE | FR_DisplayContext
  1214. #define FR_DisplayContext_Attr  ATTR_BASE | FR_DisplayContext
  1215. #define FR_DisplayContext_Pref  PREF_BASE | FR_DisplayContext
  1216.  
  1217. struct FeelinDisplayContext {
  1218.     LONG               *Scheme;
  1219.     struct  Screen     *Screen;
  1220. };
  1221. //+
  1222. /// Display                            0x901000 / DisplayServer
  1223. #define FC_Display "Display.fc"
  1224.  
  1225. #define FR_Display          0x901000
  1226. #define FR_Display_Mthd     MTHD_BASE | FR_Display
  1227. #define FR_Display_Attr     ATTR_BASE | FR_Display
  1228. #define FR_Display_Pref     PREF_BASE | FR_Display
  1229.  
  1230. #define FM_Display_CreatePen                        0xF0901000
  1231. #define FM_Display_DeletePen                        0xF0901001
  1232. #define FM_Display_CreateScheme                     0xF0901002
  1233. #define FM_Display_DeleteScheme                     0xF0901003
  1234.  
  1235. #define FM_CreatePen        FM_Display_CreatePen
  1236. #define FM_DeletePen        FM_Display_DeletePen
  1237. #define FM_CreateScheme     FM_Display_CreateScheme
  1238. #define FM_DeleteScheme     FM_Display_DeleteScheme
  1239.  
  1240. #define FA_Display_Name                             0x8F901000
  1241. #define FA_Display_Title                            0x8F901001
  1242. #define FA_Display_Width                            0x8F901002
  1243. #define FA_Display_Height                           0x8F901003
  1244. #define FA_Display_Depth                            0x8F901004
  1245. #define FA_Display_ScreenMode                       0x8F901005
  1246. #define FA_Display_Overscan                         0x8F901006
  1247. #define FA_Display_Scheme                           0x8F901007
  1248. #define FA_Display_SchemeSpec                       0x8F901008
  1249. #define FA_Display_Font                             0x8F901009
  1250. #define FA_Display_Background                       0x8F90100A
  1251. #define FA_Display_Spec                             0x8F90100B
  1252. #define FA_Display_Screen                           0x8F90100C
  1253. #define FA_Display_ColorMap                         0x8F90100D
  1254. #define FA_Display_Pens                             0x8F90100E
  1255.  
  1256. #define FP_Display_Name                             0x50901000
  1257. /*
  1258. OBJECT feelinDisplaySpec
  1259.    publicname[031]:ARRAY OF CHAR, nullbyte1:CHAR
  1260.    screenname[255]:ARRAY OF CHAR, nullbyte2:CHAR
  1261.    fontname[79]:ARRAY OF CHAR,    nullbyte3:CHAR
  1262.    background[255]:ARRAY OF CHAR, nullbyte4:CHAR
  1263.    flags
  1264.    screenmode
  1265.    overscan
  1266.    width:INT
  1267.    height:INT
  1268.    depth:INT
  1269.    version:INT -> struct version for future expansion
  1270.  
  1271.    pens:feelinSchemeSpec
  1272. ENDOBJECT
  1273. */
  1274. //+
  1275. /// Pen                                0x901040 / DisplayServer / Display
  1276. #define FR_Pen          0x901040
  1277. #define FR_Pen_Attr     ATTR_BASE | FR_Pen
  1278. #define FR_Pen_Mthd     MTHD_BASE | FR_Pen
  1279. #define FR_Pen_Pref     PREF_BASE | FR_Pen
  1280.  
  1281. #define FA_Pen_Text                                 0x8F901040
  1282. #define FA_Pen_Shine                                0x8F901041
  1283. #define FA_Pen_HalfShine                            0x8F901042
  1284. #define FA_Pen_Fill                                 0x8F901043
  1285. #define FA_Pen_HalfShadow                           0x8F901044
  1286. #define FA_Pen_Shadow                               0x8F901045
  1287. #define FA_Pen_HalfDark                             0x8F901046
  1288. #define FA_Pen_Dark                                 0x8F901047
  1289. #define FA_Pen_Highlight                            0x8F901048
  1290. #define FA_SchemeSpec                               0x8F901049
  1291.  
  1292. long enum {
  1293.     FV_Pen_Text,         // 0
  1294.     FV_Pen_Shine,        // 1
  1295.     FV_Pen_HalfShine,    // 2
  1296.     FV_Pen_Fill,         // 3
  1297.     FV_Pen_HalfShadow,   // 4
  1298.     FV_Pen_Shadow,       // 5
  1299.     FV_Pen_HalfDark,     // 6
  1300.     FV_Pen_Dark,         // 7
  1301.     FV_Pen_Highlight,    // 8
  1302.     FV_Pen_Max
  1303. };
  1304.  
  1305. #define FP_Pen_Shine                                0x50901040
  1306. #define FP_Pen_Fill                                 0x50901041
  1307. #define FP_Pen_Shadow                               0x50901042
  1308. #define FP_Pen_Dark                                 0x50901043
  1309. #define FP_Pen_Text                                 0x50901044
  1310. #define FP_Pen_Highlight                            0x50901045
  1311.  
  1312. struct FeelinPenSpec
  1313. {
  1314.     UBYTE    blackbox[12];
  1315. };
  1316.  
  1317. struct FeelinSchemeSpec
  1318. {
  1319.     UBYTE       Shine[12];
  1320.     UBYTE       Fill[12];
  1321.     UBYTE       Dark[12];
  1322.     UBYTE       Text[12];
  1323.     UBYTE       Highlight[12];
  1324.     UBYTE       Shadow[12];
  1325. };
  1326. //+
  1327.  
  1328. #endif
  1329.